---
title: 使用R语言统计多蛋白多组的WB数据
author: Song Ou-Yang
date: '2021-08-11'
slug: 使用r语言统计多蛋白多组的wb数据
categories:
  - 教程
  - R
tags:
  - plot
  - R Markdown
subtitle: ''
summary: ''
authors: []
lastmod: '2021-08-11T23:13:21+08:00'
featured: no
image:
  caption: ''
  focal_point: ''
  preview_only: no
projects: []
---



<div id="临床上经常使用wb验证蛋白表达水平使用imagej算出个泳道的灰度值以后需要做归一化和均一化处理步骤如下" class="section level4">
<h4>临床上经常使用<code>WB</code>验证蛋白表达水平,使用<code>ImageJ</code>算出个泳道的灰度值以后,需要做归一化和均一化处理,步骤如下:</h4>
<ol style="list-style-type: decimal">
<li>首先计算目的蛋白/内参蛋白得到相对比,(有的人直接拿这个来统计,当然也可以,但是对照组就不是1)</li>
<li>拿各个相对比再除以各组的对照组组的相对比,这样对照组就都是1了</li>
</ol>
</div>
<div id="这个功能可以很容易使用excel-or-wps实现当然也可以直接进行t检验但是发现如果所有值是1的话是无法在excel上使用t检验函数的当然最常见的是spss最常用的作图工具是graphpad-prism或origin不过定制性最高的却是r" class="section level4">
<h4>这个功能可以很容易使用<code>Excel</code> or <code>WPS</code>实现,当然也可以直接进行T检验,但是发现如果所有值是1的话,是无法在<code>excel</code>上使用t检验函数的,当然最常见的是SPSS,最常用的作图工具是Graphpad Prism或Origin,不过定制性最高的却是<code>R</code></h4>
</div>
<div id="比如有这样一个wb表格数据" class="section level4">
<h4>比如有这样一个WB表格数据</h4>
<table>
<thead>
<tr class="header">
<th>sample</th>
<th>A</th>
<th>B</th>
<th>C</th>
<th>Actin</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>NC1</td>
<td>128061</td>
<td>362791</td>
<td>73876</td>
<td>595320</td>
</tr>
<tr class="even">
<td>OE1</td>
<td>444296</td>
<td>685776</td>
<td>205065</td>
<td>595894</td>
</tr>
<tr class="odd">
<td>DR1</td>
<td>760531</td>
<td>1008761</td>
<td>336254</td>
<td>596468</td>
</tr>
<tr class="even">
<td>NC2</td>
<td>206016</td>
<td>267960</td>
<td>126144</td>
<td>553840</td>
</tr>
<tr class="odd">
<td>OE2</td>
<td>454608</td>
<td>624546</td>
<td>251256</td>
<td>545392</td>
</tr>
<tr class="even">
<td>DR2</td>
<td>703200</td>
<td>981132</td>
<td>376368</td>
<td>536944</td>
</tr>
<tr class="odd">
<td>NC3</td>
<td>215730</td>
<td>236808</td>
<td>118008</td>
<td>560008</td>
</tr>
<tr class="even">
<td>OE3</td>
<td>441000</td>
<td>639600</td>
<td>255750</td>
<td>560505</td>
</tr>
<tr class="odd">
<td>DR3</td>
<td>666270</td>
<td>1042392</td>
<td>393492</td>
<td>561002</td>
</tr>
</tbody>
</table>
</div>
<div id="从excel里面复制以后可以从excel直接粘贴数据-mac系统代码" class="section level4">
<h4>从excel里面复制以后,可以从excel直接粘贴数据 (Mac系统代码)</h4>
<pre class="r"><code>wb &lt;- read.table(pipe(&quot;pbpaste&quot;), # 读取剪切板中的数据
                      sep=&quot;\t&quot;, # 指定分隔符
                      header = TRUE) </code></pre>
<p>如果是windows系统,那么代码就是:</p>
<pre class="r"><code>### wb &lt;- read.table(file = &quot;clipboard&quot;, sep = &quot;\t&quot;, header=TRUE) # </code></pre>
</div>
<div id="接着我们开始进行计算" class="section level4">
<h4>接着我们开始进行计算</h4>
</div>
<div id="首先是用目的蛋白内参蛋白actin我定义为x_r" class="section level4">
<h4>1. 首先是用目的蛋白/内参蛋白(actin),我定义为<code>x_r</code></h4>
<pre class="r"><code>wb$A_r&lt;-wb$A/wb$Actin
wb$B_r&lt;-wb$B/wb$Actin
wb$C_r&lt;-wb$C/wb$Actin</code></pre>
</div>
<div id="用x_r除以nc组的相对比我将他定义为x_n.由于没有excel的e2这种实现固定的办法因此我想办法曲折了一下我的思路是先新增一列a_n然后前3行除以a_r的第一行中间三行除以a_r的第四行后三行除以a_r的第七行然后居然成功了后面同法计算b和c蛋白的归一化值." class="section level4">
<h4>2. 用x_r除以NC组的相对比,我将他定义为’x_n’.由于没有<code>excel</code>的<code>$E$2</code>这种实现固定的办法,因此我想办法曲折了一下,我的思路是先新增一列<code>A_n</code>,然后前3行除以A_r的第一行,中间三行除以A_r的第四行,后三行除以A_r的第七行,然后居然成功了,后面同法计算B和C蛋白的归一化值.</h4>
<pre class="r"><code>wb$A_n[1:3]=wb$A_r[1:3]/wb$A_r[1]
wb$A_n[4:6]=wb$A_r[4:6]/wb$A_r[4]
wb$A_n[7:9]=wb$A_r[7:9]/wb$A_r[7]
wb$B_n[1:3]=wb$B_r[1:3]/wb$B_r[1]
wb$B_n[4:6]=wb$B_r[4:6]/wb$B_r[4]
wb$B_n[7:9]=wb$B_r[7:9]/wb$B_r[7]
wb$C_n[1:3]=wb$C_r[1:3]/wb$C_r[1]
wb$C_n[4:6]=wb$C_r[4:6]/wb$C_r[4]
wb$C_n[7:9]=wb$C_r[7:9]/wb$C_r[7]</code></pre>
</div>
<div id="首先需要把短数据转换为长数据把样本留下添加一列蛋白和一列灰度值分别命名为protein和value." class="section level4">
<h4>首先需要把短数据转换为长数据,把样本留下,添加一列蛋白和一列灰度值,分别命名为’protein’和’value’.</h4>
<pre class="r"><code>library(reshape2) 
wb_long&lt;-melt(wb,
                id.vars = c(&#39;sample&#39;),##需要保留的列,非数字格式
                measure.vars=c(&#39;A_n&#39;,&#39;B_n&#39;,&#39;C_n&#39;),##需要保留的值,数字格式
                variable.name=&#39;Protein&#39;,##新定义个列并命名,非数字格式
                value.name=&#39;Value&#39;)##新定义一个列并命名,数字格式</code></pre>
</div>
<div id="新增一个分组如果是单纯按ncoe和dr排序的话完全可以" class="section level4">
<h4>新增一个分组,如果是单纯按NC、OE、和DR排序的话,完全可以</h4>
<pre class="r"><code>wb_long$Group=rep(c(&#39;NC&#39;, &#39;OE&#39;,&#39;DR&#39;), each = 3)  ##分为3组，每组3个数据</code></pre>
</div>
<div id="但是这个数据是按nc1oe1dr1nc2这样排序所以上面代码分组后是错的最简单的办法是导出csv然后excel简单定义一下其实也就是把数字去掉加个group的组就行但是这部操作r我还没学会有个shiny的包可以交互式处理数据但是又不能直接保存到environment里其实这种简单的处理完全可以先excel处理好了以后再作图毕竟excel号称除了不能生孩子" class="section level4">
<h4>但是这个数据是按NC1,OE1,DR1,NC2…这样排序,所以上面代码分组后是错的,最简单的办法是导出csv,然后Excel简单定义一下,其实也就是把数字去掉,加个Group的组就行,但是这部操作R我还没学会,有个shiny的包可以交互式处理数据,但是又不能直接保存到Environment里,其实这种简单的处理,完全可以先excel处理好了以后再作图,毕竟<code>excel</code>号称除了不能生孩子…</h4>
</div>
<div id="当然如果你想用shiny可以按照dataeditr这个包直接安装即可但前提是要先安装好shiny" class="section level4">
<h4>当然如果你想用<code>shiny</code>,可以按照<code>DataEditR</code>这个包,直接安装即可,但前提是要先安装好shiny</h4>
<blockquote>
<p>instal.packages(“shiny”)
instal.packages(“DataEditR”)
library(DataEditR)
data_edit(wb_long)</p>
</blockquote>
<p>这样就可以像excel那样处理表格里,导出数据,再导入数据.</p>
<pre class="r"><code>wb_long&lt;-read.csv(&quot;/Users/mac/Documents/GitHub/blog/content/post/2021-08-11-使用r语言统计多蛋白多组的wb/wb_long.csv&quot;)</code></pre>
</div>
<div id="固定一下分组的顺序需要先设置为因子" class="section level2">
<h2>固定一下分组的顺序,需要先设置为因子</h2>
<pre class="r"><code>wb_long &lt;- within(wb_long, Group &lt;- factor(Group, levels = c(&quot;NC&quot;, &quot;OE&quot;,&quot;DR&quot;))) </code></pre>
</div>
<div id="画图这里联合ggplot2和ggpubr其实ggpubr可以一步出图但是底层限制死了我们可以借助ggppubr进行统计画图还是用ggplot2统计的是两种首先进行anova看整体差异然后看各组与对照组的差异" class="section level2">
<h2>画图,这里联合ggplot2和ggpubr,其实ggpubr可以一步出图,但是底层限制死了,我们可以借助ggppubr进行统计,画图还是用ggplot2,统计的是两种,首先进行anova看整体差异,然后看各组与对照组的差异</h2>
<pre class="r"><code>library(ggplot2)
library(ggpubr)
ggplot(wb_long ,
       aes(x=Group,y=Value,color=Group,fill=Group))+
    geom_bar(stat=&quot;summary&quot;,fun=mean,position=&quot;dodge&quot;)+
    stat_summary(fun.data = &#39;mean_sd&#39;, geom = &quot;errorbar&quot;, width = 0.5,position = position_dodge(0.9))+
    facet_grid(~Protein,scales = &#39;free&#39;)+
    theme_minimal(base_size = 12)+
    labs(x=NULL,y=&#39;Relative protein expression&#39;)+
    geom_dotplot(stackdir = &quot;center&quot;, binaxis = &quot;y&quot;, 
                 fill = &quot;lightgray&quot;, 
                 dotsize = 0.9,position = position_dodge(0.9))+
    stat_compare_means(method = &quot;anova&quot;)+
    stat_compare_means(method = &#39;t.test&#39;,label = &quot;p.signif&quot;,comparisons = list(c(&#39;NC&#39;,&#39;OE&#39;),c(&#39;NC&#39;,&#39;DR&#39;)))</code></pre>
<pre><code>## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.</code></pre>
<p><img src="{{< blogdown/postref >}}index.cn_files/figure-html/unnamed-chunk-9-1.png" width="672" /></p>
<div id="也可以提取某一个蛋白的数据进行毕竟比如只看b蛋白的数据可以用下面的函数然后作图" class="section level4">
<h4>也可以提取某一个蛋白的数据,进行毕竟,比如只看<code>B蛋白</code>的数据,可以用下面的函数,然后作图</h4>
<pre class="r"><code>B&lt;-wb_long[wb_long$Protein == &#39;B_n&#39;,]
ggplot(B ,
       aes(x=Group,y=Value,color=Group,fill=Group))+
    geom_bar(stat=&quot;summary&quot;,fun=mean,position=&quot;dodge&quot;)+
    stat_summary(fun.data = &#39;mean_sd&#39;, geom = &quot;errorbar&quot;, width = 0.5,position = position_dodge(0.9))+
    theme_minimal(base_size = 12)+
    labs(x=NULL,y=&#39;Relative protein expression&#39;)+
    geom_dotplot(stackdir = &quot;center&quot;, binaxis = &quot;y&quot;, 
                 fill = &quot;lightgray&quot;, 
                 dotsize = 0.9,position = position_dodge(0.9))+
    stat_compare_means(method = &quot;anova&quot;)+
    stat_compare_means(method = &#39;t.test&#39;,label = &quot;p.signif&quot;,comparisons = list(c(&#39;NC&#39;,&#39;OE&#39;),c(&#39;NC&#39;,&#39;DR&#39;)))</code></pre>
<pre><code>## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.</code></pre>
<p><img src="{{< blogdown/postref >}}index.cn_files/figure-html/unnamed-chunk-10-1.png" width="672" /></p>
</div>
</div>
<div id="当然也可以换个主题和配色可以用ggsci也可以用ggplot的自定义这里用ggsci的lancet配色" class="section level2">
<h2>当然也可以换个主题和配色,可以用<code>ggsci</code>,也可以用ggplot的自定义,这里用<code>ggsci</code>的<code>lancet</code>配色</h2>
<pre class="r"><code>library(ggsci)
ggplot(B ,
       aes(x=Group,y=Value,color=Group,fill=Group))+
    geom_bar(stat=&quot;summary&quot;,fun=mean,position=&quot;dodge&quot;)+
    stat_summary(fun.data = &#39;mean_sd&#39;, geom = &quot;errorbar&quot;, width = 0.5,position = position_dodge(0.9))+
    theme_bw(base_size = 12)+
    scale_color_lancet()+
    scale_fill_lancet()+
    labs(x=NULL,y=&#39;Relative protein expression&#39;)+
    geom_dotplot(stackdir = &quot;center&quot;, binaxis = &quot;y&quot;, 
                 fill = &quot;lightgray&quot;, 
                 dotsize = 0.9,position = position_dodge(0.9))+
    stat_compare_means(method = &quot;anova&quot;)+
    stat_compare_means(method = &#39;t.test&#39;,label = &quot;p.signif&quot;,comparisons = list(c(&#39;NC&#39;,&#39;OE&#39;),c(&#39;NC&#39;,&#39;DR&#39;)))</code></pre>
<pre><code>## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.</code></pre>
<p><img src="{{< blogdown/postref >}}index.cn_files/figure-html/unnamed-chunk-11-1.png" width="672" />
## 这里手动添加配色,然后把标签去掉,因为底下已经有标签了,加一句<code>theme(legend.position = 'none')</code></p>
<pre class="r"><code>ggplot(B ,
       aes(x=Group,y=Value,color=Group,fill=Group))+
    geom_bar(stat=&quot;summary&quot;,fun=mean,position=&quot;dodge&quot;)+
    stat_summary(fun.data = &#39;mean_sd&#39;, geom = &quot;errorbar&quot;, width = 0.5,position = position_dodge(0.9))+
    theme_bw(base_size = 12)+
    scale_color_manual(values = c(&#39;gray&#39;,&#39;steelblue&#39;,&#39;firebrick&#39;))+
    scale_fill_manual(values = c(&#39;gray&#39;,&#39;steelblue&#39;,&#39;firebrick&#39;))+
    labs(x=NULL,y=&#39;Relative protein expression&#39;)+
    geom_dotplot(stackdir = &quot;center&quot;, binaxis = &quot;y&quot;, 
                 fill = &quot;lightgray&quot;, 
                 dotsize = 0.9,position = position_dodge(0.9))+
    stat_compare_means(method = &quot;anova&quot;)+
    stat_compare_means(method = &#39;t.test&#39;,label = &quot;p.signif&quot;,comparisons = list(c(&#39;NC&#39;,&#39;OE&#39;),c(&#39;NC&#39;,&#39;DR&#39;)))+theme(legend.position = &#39;none&#39;)</code></pre>
<pre><code>## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.</code></pre>
<p><img src="{{< blogdown/postref >}}index.cn_files/figure-html/unnamed-chunk-12-1.png" width="672" /></p>
</div>
